<html>
    <head>
        <title>发起请求</title>
    </head>
    <body>
        <script>
            /*
                一、uni.request(Object)

                        1、概述  
                                
                                发起网络请求

                        2、Object 参数说明

                                                参数名	                    类型	            必填	默认值	            说明	                                                              平台差异说明
                                                
                                            ①、url	                        String	            是		                开发者服务器接口地址	

                                            ②、data	                Object/String/ArrayBuffer	否		                请求的参数	App 3.3.7 以下不支持 ArrayBuffer 类型

                                            ③、header	                    Object	            否		                设置请求的 header，header 中不能设置 Referer	                        App、H5端会自动带上cookie，且H5端不可手动修改

                                            ④、method	                    String	            否	    GET	            有效值详见下方说明	

                                            ⑤、timeout	                    Number	            否	    60000	        超时时间，单位 ms	                                                    H5(HBuilderX 2.9.9+)、APP(HBuilderX 2.9.9+)、微信小程序（2.10.0）、支付宝小程序

                                            ⑥、dataType	                    String	            否	    json	        如果设为 json，会对返回的数据进行一次 JSON.parse，
                                                                                                                        非 json 不会进行 JSON.parse	

                                            ⑦、responseType	                String	            否	    text	        设置响应的数据类型。合法值：text、arraybuffer	                          支付宝小程序不支持

                                            ⑧、sslVerify	                Boolean	            否	    true	        验证 ssl 证书	                                                        仅App安卓端支持（HBuilderX 2.3.3+），不支持离线打包

                                            ⑨、withCredentials	            Boolean	            否	    false	        跨域请求时是否携带凭证（cookies）	                                      仅H5支持（HBuilderX 2.6.15+）

                                            ⑩、firstIpv4	                Boolean	            否	    false	        DNS解析时优先使用ipv4	                                                 仅 App-Android 支持 (HBuilderX 2.8.0+)

                                            ⑪、enableHttp2	                Boolean	            否	    false	        开启 http2	                                                            微信小程序

                                            ⑫、enableQuic	                Boolean	            否	    false	        开启 quic	                                                            微信小程序

                                            ⑬、enableCache	                Boolean	            否	    false	        开启 cache	                                                            微信小程序、抖音小程序 2.31.0+

                                            ⑭、enableHttpDNS	            Boolean	            否	    false	        是否开启 HttpDNS 服务。
                                                                                                                        如开启，需要同时填入 httpDNSServiceId 。 
                                                                                                                        HttpDNS 用法详见 移动解析HttpDNS	                                     微信小程序
                                        
                                            ⑮、httpDNSServiceId	            String	            否		                HttpDNS 服务商 Id。 HttpDNS 用法详见 移动解析HttpDNS	                  微信小程序
                                        
                                            ⑯、enableChunked	            Boolean	            否	    false	        开启 transfer-encoding chunked	                                        微信小程序
                                        
                                            ⑰、forceCellularNetwork	        Boolean	            否	    false	        wifi下使用移动网络发送请求	                                              微信小程序
                                            
                                            ⑱、enableCookie	                Boolean	            否	    false	        开启后可在headers中编辑cookie	                                          支付宝小程序 10.2.33+
                                        
                                            ⑲、cloudCache	            Object/Boolean	        否	    false	        是否开启云加速（详见云加速服务）	                                       百度小程序 3.310.11+
                                            
                                            ⑳、defer	                    Boolean	            否	    false	        控制当前请求是否延时至首屏内容渲染后发送	                                百度小程序 3.310.11+
                                            
                                            21、success	                    Function	        否		                收到开发者服务器成功返回的回调函数	
                                        
                                            22、fail	                    Function	        否		                接口调用失败的回调函数	
                                        
                                            23、complete	                Function	        否		                接口调用结束的回调函数（调用成功、失败都会执行）
                                     
                                            

                                    <1>、method 有效值

                                                注意： method 有效值必须大写，每个平台支持的 method 有效值不同，详细见下表：

                                                        method	App	    H5	微信小程序	支付宝小程序	百度小程序	抖音小程序、飞书小程序	快手小程序	京东小程序

                                                        ①、GET	      √	    √	    √	        √	        √	        √	                    √	      √

                                                        ②、POST	      √	    √	    √	        √	        √	        √	                    √	       √

                                                        ③、PUT	      √	    √	    √	        x	        √	        √	                    x	        x

                                                        ④、DELETE	  √	    √	    √	        x	        √	        x	                    x	        x

                                                        ⑤、CONNECT	  x	    √	    √	        x	        x	        x	                    x       	x

                                                        ⑥、HEAD	      √	    √	    √	        x	        √	        x	                    x           x

                                                        ⑦、OPTIONS	  √	    √	    √	        x	        √	        x	                    x	        x

                                                        ⑧、TRACE	  x	    √	    √	        x	        x	        x	                    x	        x

                                    <2>、success返回参数说明

                                                    参数	                类型	                    说明

                                                1、data 	    Object/String/ArrayBuffer	    开发者服务器返回的数据

                                                2、statusCode	            Number	            开发者服务器返回的 HTTP 状态码

                                                3、header	                Object	            开发者服务器返回的 HTTP Response Header

                                                4、cookies	                Array.<string>	    开发者服务器返回的 cookies，格式为字符串数组


                        3、返回值

                                <1>、结构

                                        类型

                                        RequestTask

                                <2>、RequestTask类实例的方法

                                        ①、abort():void

                                               中断网络请求

                                        ②、onChunkReceived(listener:RequestTaskOnChunkReceiverCallback):number
                                        
                                                监听 Transfer-Encoding Chunk Received 事件     
                                        
                                                ★、 RequestTask 对象的 Transfer-Encoding Chunk Received 事件，是指：

                                                    当客户端（RequestTask 实例）接收到服务器通过分块传输编码（chunked）发送的一个完整数据块时，触发的事件。

                                                    简单说，就是「每收到一个分块数据，就触发一次该事件」

                                                ★、 参数 HarmonyOS 兼容性

                                                    名称	            类型	                                                    必填	默认值	兼容性	描述
                                                    listener	(result: RequestTaskOnChunkReceivedListenerResult) => void	        是	      -	      -	   -

                                                ★、返回值

                                                        类型
                                                        number

                                        ③、offChunkReceived(listener?:number|RequestTaskOnChunkReceivedCallback |null):void

                                                移除 Transfer-Encoding Chunk Received 事件的监听函数。

                                                ★、offChunkReceived 兼容性

                                                        HarmonyOS
                                                        HBuilderX 4.71

                                                ★、参数 HarmonyOS 兼容性

                                                            名称	            类型	                                                        必填	默认值	兼容性	描述
                                                            listener	number | (result: RequestTaskOnChunkReceivedListenerResult) => void	    否	    -	    -	    -


                                        ③、onHeaderReceived(listener: RequestTaskOnHeadersReceivedCallback):number

                                                    监听 HTTP Response Header 事件。
                                                    
                                                    (HTTP Response Header 事件 通常指的是当客户端（如浏览器、RequestTask 等请求对象）接收到服务器返回的 HTTP 响应头（Response Headers）时触发的事件。)

                                                   ★、onHeadersReceived兼容性

                                                            HarmonyOS
                                                            HBuilderX 4.71

                                                    ★、参数 HarmonyOS 兼容性
                                                    
                                                            名称	            类型	                                                必填	默认值	兼容性	        描述
                                                            listener	(result: RequestTaskOnHeadersReceivedListenerResult) => void	是	    -	    -	        HTTP Response Header 事件的监听函数


                                                    ★、RequestTaskOnHeadersReceivedListenerResult 的属性值

                                                                名称	                        类型	        必填	默认值	    兼容性	    描述

                                                            ①、cookies	                    Array<string>	    是	    -	                开发者服务器返回的 cookies，格式为字符串数组

                                                            ③、header	                    UTSJSONObject	    是	    -	                开发者服务器返回的 HTTP Response Header

                                                            ⑤、statusCode	                    number	        是	    -	                开发者服务器返回的 HTTP 状态码 （目前开发者工具上不会返回 statusCode 字段，
                                                                                                                                            可用真机查看该字段，后续将会支持）

                                                    ★、返回值
                                                                
                                                            类型

                                                            number

                                        ⑤、offHeadersReceived(listener?: number | RequestTaskOnHeaderReceivedCallback |null) :void

                                                    移除 HTTP Response Header 事件的监听函数。


                                                    ★、offHeadersReceived兼容性

                                                                HarmonyOS
                                                                HBuilderX 4.71

                                                    ★、参数 HarmonyOS 兼容性

                                                                名称	            类型	                                                        必填	默认值	兼容性	描述
                                                                listener	number | (result: RequestTaskOnHeadersReceivedListenerResult) => void	否	    -	    -	    -


                      4、data 数据说明

                                <1>、 data 数据转换与转换规则

                                   最终发送给服务器的数据库是String类型，如果传入的 data不是String 类型，会被转换成String。   

                                    ★、转换规则如下：

                                            ①、对于 GET 方法，会将数据转换为 query string 。 例如：  {name:'name',age:18 } 转换后的结果是  name=name&age=18

                                            ②、对于 POST 方法且 header['content-type'] 为 application/json 的数据，会进行JSON序列化

                                            ③、对于 POST 方法且 header['content-type'] 为 application/x-wwww-form-urlencoded 的数据，会将数据转换为 query string


                                <2>、示例

                                            uni.requeset({
                                                url:'https://www.example.com/request',  // 仅为示例，并非真实接口地址
                                                data:{
                                                    text:'uni.request'
                                                },
                                                header:{
                                                    'custom-header':'hello'   // 自定义请求头
                                                },
                                                success:(res)=>{
                                                    console.log(res.data);
                                                    this.text='request success';
                                                }
                                            })

                      5、返回值

                                        如果希望返回一个  requestTask对象，需要至少传入 success/fail/complete 参数中的一个。

                                        例如：

                                                var requestTask = uni.request({
                                                    url:'https:// www.example.com/request', // 仅为示例，并非真实接口地址
                                                    complete:()=>{}
                                                });

                                                requestTask.abort();
                                        
                                        如果没有传入 success/fail/complete 参数，则会返回封装后的Promise对象 ：  Promise封装：https://uniapp.dcloud.net.cn/api/index.html#promise-%E5%B0%81%E8%A3%85
                                        
                                        通过 requestTask ,可中断请求任务。


                                        ★、requestTask 对象的方法列表

                                                    方法	                参数	    说明
                                                    
                                                1、abort		中                  断请求任务

                                                2、offHeadersReceived		        取消监听 HTTP Response Header 事件，仅微信小程序平台支持，文档详情 :https://developers.weixin.qq.com/miniprogram/dev/api/RequestTask.offHeadersReceived.html

                                                3、onHeadersReceived		        监听 HTTP Response Header 事件。会比请求完成事件更早，仅微信小程序平台支持，文档详情 : https://developers.weixin.qq.com/miniprogram/dev/api/RequestTask.onHeadersReceived.html
                                        
                                        ★、示例：

                                                const requestTask = uni.request({
                                                    url:'https://www.example.com/request',  
                                                    data:{
                                                        name:'name',
                                                        adge:18
                                                    },
                                                    success:function(res)=>{
                                                        console.log(res.data);
                                                    }
                                                });

                                                // 中断请求任务

                                                requestTask.abort();


                        6、注意点：

                                     ①、请求的 header 中 content-type 默认为 application/json。

                                     ②、避免在 header 中使用中文，或者使用 encodeURIComponent 进行编码，否则在百度小程序报错。（来自：快狗打车前端团队）https://juejin.im/user/2612095359650712

                                     ③、网络请求的 "超时时间" 可以统一在 manifest.json 中配置 networkTimeout  

                                     ④、H5 端本地调试需注意跨域问题，参考：调试跨域问题解决方案 ：https://ask.dcloud.net.cn/article/35267

                                     ⑤、注意由于报读小程序iOS客户端，请求失败时会进入 fail回调，需要针对百度增加相应的处理以解决该问题

                                     ⑥、注意小程序端不支持自动保持 cookie, 服务器应避免验证 cookie。

                                            如果服务器无法修改，也可以使用一些模拟手段，比如这样的工具: https://github.com/charleslo1/weapp-cookie  ，可以请求时带上 cookie 并将响应的 cookie
                                     
                                     ⑦、H5端cookie 受跨域限制 (和平时开发网站时一样)，旧版的 uni.request 未支持 "withCredentials "  配置，可以直接使用 xhr 对象或者其他类库。

                                     ⑧、根据W3C规范，H5 端无法获取 response header 中 Set-Cookie、Set-Cookie2 这2个字段，对于跨域请求，
                                     
                                            允许获取的 response header 字段只限于“simple response header”和“Access-Control-Expose-Headers”（详情）

                                     ⑨、uni-app 插件市场有flyio、axios等三方封装的拦截器可用

                                     ⑩、低版本手机自身不支持 ipv6，如果服务器仅允许 ipv6，会导致老手机无法正常运行或访问速度非常慢

                                     ⑪、localhost、127.0.0.1等服务器地址，只能在电脑端运行，手机端连接时不能访问。请使用标准IP并保证手机能连接电脑网络

                                     ⑫、debug 模式，安卓端暂时无法获取响应头，url中含有非法字符（如未编码为%20的空格）时会请求失败、

                                     ⑬、iOS App第一次安装启动后，会弹出是否允许联网的询问框，在用户点击同意前，调用联网API会失败。
                                        
                                            请注意判断这种情况。
                                            
                                            比如官方提供的新闻模板示例（HBuilderX新建项目可选择），会判断如果无法联网，则提供一个错误页，提示用户设置网络及下拉刷新重试。

                                     ⑭、良好体验的App，还会判断当前是否处于飞行模式（参考）、是wifi还是3G（参考）

                                     ⑮、部分安卓设备，真机运行或debug模式下的网速，低于release模式很多。

                                     ⑯、使用一些比较小众的证书机构（如：CFCA OV OCA）签发的 ssl 证书在安卓设备请求会失败，因为这些机构的根证书不在系统内置根证书库，
                                     
                                        可以更换其他常见机构签发的证书（如：Let's Encrypt），或者配置 sslVerify 为 false 关闭 ssl 证书验证（不推荐）。

                                     ⑰、离线打包不支持 sslVerify  配置

                                     ⑱、单词网络请求数据量建议控制在 50k 以下 (仅指 json 数据，不含图片 )，过多数据应分页获取，以提升应用体验。

            */

            /*
                 二、uni.configMTLS(Object)

                                https 请求配置自签名证书

                            1、Object 参数说明

                                                参数	                    类型	                必填	    说明

                                            ①、certificates	        Array<certificate>	             是	    certificates 为数组，支持为多个域名配置自签名证书

                                            ②、success	            Function(callbackObject)	     否	    接口调用成功的回调函数

                                            ③、fail	                Function(callbackObject)	     否 	接口调用失败的回调函数

                                            ④、complete	            Function	                     否	    接口调用结束的回调函数（调用成功、失败都会执行）


                                        <1>、certificate 参数说明

                                                        参数	          类型	        必填	    说明

                                                    ①、host	            string	        是	    对应请求的域名（注意：不要协议部分）

                                                    ②、client	        string	        否	    客户端证书（服务器端需要验证客户端证书时需要配置此项，
                                                                                                格式要求请参考下面的证书格式说明，注意 iOS 平台客户端证书只支持 .p12 类型的证书。
                                                                                                HarmonyOS Next 上是证书路径 文档）

                                                    ③、keyPath	        string	        否	    证书秘钥的路径，只支持 HarmonyOS Next (HBuilderX 4.31)

                                                    ④、clientPassword	string	        否	    客户端证书对应的密码（客户端证书存在时必须配置此项。
                                                                                                HarmonyOS Next 上是证书秘钥的密码 文档）

                                                    ⑥、server	    Array<string>	    否	    服务器端证书（客户端需要对服务器端证书做校验时需要配置此项，通常使用自签名证书时才需要配置，
                                                                                                格式要求请参考下面的证书格式说明，注意 iOS 平台服务器端证书只支持 .cer 类型的证书，
                                                                                                不仅仅验证公钥，还要验证整个证书链，请保证证书的完整性。HarmonyOS Next 不支持）  

                                        <2>、证书格式说明

                                                    证书支持两种格式，文件格式和 Base64字符串格式：

                                                    ①、文件格式说明：
                                                        
                                                            可将证书文件放到工程的 ‘static’ 目录中（当然也可以通过请求下载到本地），然后填写文件路径，示例：'/static/client.p12'

                                                    ②、Base64String 个数说明：

                                                            将证书文件的二进制转换为 Base64String 字符串，然后再字符串前面添加 'data/cert/pem;base64' 前缀，

                                                            示例： 'data:cert/pem;base64,xxx' xxx 代表真实的证书 base64String

                                        <3>、callbackObject 参数说明

                                                    属性         类型               说明

                                                    code          Number            成功0，失败返回相应 code 码

                        
                          2、示例：

                                    uni.configMTLS({
                                        certificates:[
                                            'host':'www.test.com',
                                            'client':'/static/client.p12',
                                            'clientPassword':'123456789',
                                            'server':['/static/server.cer']
                                        ]
                                    })
            */
        </script>
    </body>
</html>